package com.ror.java.se.oop.generic;

/* 需求：
    定义一个继承结构：
                        动物
             猫                    狗
        波斯猫  狸花猫           泰迪  哈士奇
    属性：名字，年龄
    行为：吃东西
        波斯猫方法体打印：一只叫做XXX的，X岁的波斯猫，正在吃小饼干
        狸花猫方法体打印：一只叫做XXX的，X岁的狸花猫，正在吃鱼
        泰迪方法体打印：一只叫做XXX的，X岁的泰迪，正在吃骨头，边吃边蹭
        哈士奇方法体打印：一只叫做XXX的，X岁的哈士奇，正在吃骨头，边吃边拆家
    测试类中定义一个方法用于饲喂养动物：
        public static void keepPet(ArrayList<???> list){
            //通历集合，调用动物的eat方法
        }
    要求1：该方法能喂养所有品种的猫，但是不能喂养狗
    要求2：该方法能喂养所有品种的狗，但是不能喂养猫
    要求3：该方法能喂养所有的动物，但是不能喂养其他类型的对象
*/

import java.util.ArrayList;

public class Demo01GenericAnimal {
    public static void main(String[] args) {
        Cat cat1 = new PersianCat();
        cat1.setName("胡小波");
        cat1.setAge(5);
        Cat cat2 = new LihuaCat();
        cat2.setName("优花璃");
        cat2.setAge(3);
        Dog dog1 = new TeddyDog();
        dog1.setName("泰特");
        dog1.setAge(4);
        Dog dog2 = new HuskyDog();
        dog2.setName("莱因哈特");
        dog2.setAge(8);
        ArrayList<Cat> cats = new ArrayList<>();
        cats.add(cat1);
        cats.add(cat2);
        ArrayList<Dog> dogs = new ArrayList<>();
        dogs.add(dog1);
        dogs.add(dog2);
        GenericTest.feedCat(cats);
        GenericTest.feedDog(dogs);
        GenericTest.feedPat(cats);
        GenericTest.feedPat(dogs);
    }

}
